home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1833 / 1833.xpi / chrome / yoono.jar / content / yoono / bkmMenus.js < prev    next >
Text File  |  2009-12-16  |  8KB  |  218 lines

  1.  
  2.  
  3. function log(m) {
  4.   var console = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
  5.   console.logStringMessage(m);
  6. }
  7.  
  8. // Get a locale string with his name
  9. function _(name) {
  10.   return YOONO_DIALOGS.bundle.GetStringFromName(name);
  11. }
  12.  
  13. // this method needs to be accessible in FF2 and FF3 
  14. yoonoGlob.createContext =    function (destPopup, id, isFolder, isPrivate, isBookmark) {
  15.         var menu=destPopup.yoonoPopup;
  16.     // Ignore places top container (FF3)
  17.     if (!YOONO_BKM.getNode(id)) {
  18.       if (menu) {
  19.         try { destPopup.removeChild(menu); } catch(e) {}
  20.       }
  21.       return;
  22.     }
  23.         if (!menu || menu!=destPopup.lastChild /* <- FF2 */) {
  24.       log("create");
  25.             menu = document.createElement("menu");
  26.             menu.setAttribute("label", "Yoono");
  27.             menu.addEventListener("popupshowing", function (aEvent) {aEvent.stopPropagation()}, false);
  28.             menu.addEventListener("popuphidden", function (aEvent) {aEvent.stopPropagation()}, false);
  29.             destPopup.yoonoPopup=destPopup.appendChild(menu);
  30.         } else {
  31.       log("cleanup");
  32.       while(menu.firstChild)
  33.         menu.removeChild(menu.firstChild);
  34.     }
  35.         var menupopup = document.createElement("menupopup");
  36.         menu.appendChild(menupopup);
  37.  
  38.         if (isFolder) {
  39.             var menuitem = document.createElement("menuitem");
  40.             if (isPrivate) {
  41.         menuitem.setAttribute("label", _("bkms.public.label"));
  42.         menuitem.setAttribute("accesskey", _("bkms.public.accesskey"));
  43.               menuitem.addEventListener("click", function (e) { bmMkPublic(id); }, false);
  44.             } else {
  45.                 menuitem.setAttribute("label", _("bkms.private.label"));
  46.         menuitem.setAttribute("accesskey",  _("bkms.private.accesskey"));
  47.               menuitem.addEventListener("click", function (e) { bmMkPrivate(id); }, false);
  48.             }
  49.             menupopup.appendChild(menuitem);
  50.  
  51.             menuitem = document.createElement("menuitem");
  52.       menuitem.setAttribute("label", _("bkms.searchmultisite.label"));
  53.       menuitem.setAttribute("accesskey", _("bkms.searchmultisite.accesskey"));
  54.       menuitem.setAttribute("tooltiptext", _("bkms.searchmultisite.tooltiptext"));
  55.             menuitem.addEventListener("click", function (e) { searchSites(id); }, false);
  56.             menupopup.appendChild(menuitem);
  57.  
  58.             menuitem = document.createElement("menuitem");
  59.       menuitem.setAttribute("label", _("bkms.random.label"));
  60.       menuitem.setAttribute("accesskey", _("bkms.random.accesskey"));
  61.       menuitem.setAttribute("tooltiptext", _("bkms.random.tooltiptext"));
  62.       menuitem.addEventListener("click", function (e) { randomFromFolder(e, id); }, false);
  63.             menupopup.appendChild(menuitem);
  64.  
  65.         } else if (isBookmark) {
  66.             var menuitem = document.createElement("menuitem");
  67.             menuitem.setAttribute("label", _("bkms.searchsinglesite.label"));
  68.       menuitem.setAttribute("accesskey", _("bkms.searchsinglesite.accesskey"));
  69.       menuitem.setAttribute("tooltiptext", _("bkms.searchsinglesite.tooltiptext"));
  70.             menuitem.addEventListener("click", function (e) { searchSites(id); }, false);
  71.             menupopup.appendChild(menuitem);
  72.             
  73.         }
  74.     }
  75.  
  76. function attachYoonoBkmMenu() {
  77. try {
  78.  
  79.     
  80.     // FF3 specific
  81.     if (typeof PlacesController!="undefined") {
  82.     log("switch to ff3 bookmarks mode");
  83.         YOONO_LOG.debug("switch to ff3 bookmarks mode");
  84.         PlacesController.prototype.beforeYoonoBuildContextMenu = PlacesController.prototype.buildContextMenu;
  85.         PlacesController.prototype.buildContextMenu = function (aPopup) {
  86.             try {
  87.                 var result = this.beforeYoonoBuildContextMenu(aPopup);
  88.                 var node = this._view.selectedNode;
  89.                 
  90.                 if ( node == null || (!PlacesUtils.nodeIsFolder(node) && !PlacesUtils.nodeIsBookmark(node)) )
  91.                     return result;
  92.                 
  93.                 yoonoGlob.createContext(aPopup, node.itemId, PlacesUtils.nodeIsFolder(node), YOONO_BKM.isPrivate(node.itemId), PlacesUtils.nodeIsBookmark(node));
  94.                 
  95.                 return true;
  96.             } catch(e) {
  97.         log("e : "+e+" / "+e.stack);
  98.         alert(e);
  99.                 YOONO_LOG.exception(e);
  100.             }
  101.         }
  102.     } else { // FF2 specific
  103.         YOONO_LOG.debug("switch to ff2 bookmarks mode");
  104.         // on l'accroche α BookmarksCommand car createContextMenu utilise une rΘfererence α 'this'
  105.         BookmarksCommand.createContextMenuBeforeYoono = BookmarksCommand.createContextMenu;
  106.         BookmarksCommand.createContextMenu = function (aEvent, aSelection, aDS) {
  107.             BookmarksCommand.createContextMenuBeforeYoono(aEvent, aSelection, aDS);
  108.  
  109.             var popup = aEvent.target;
  110.             if (!popup.childNodes.length) return;
  111.  
  112.             var rTarget = aSelection.item[0];
  113.       
  114.             try {
  115.                 var type = BookmarksUtils.resolveType(rTarget, aDS);
  116.                 if (type != "Folder" && type != "PersonalToolbarFolder" && type != "Bookmark")
  117.                     return;
  118.             } catch (ex) {}
  119.       
  120.       log(aSelection+" / "+aSelection.item+" / "+aSelection.item.length+" | "+rTarget.Value+" : "+type+" ] "+popup.tagName);
  121.       
  122.             yoonoGlob.createContext(popup, rTarget.Value, type=="Folder" || type=="PersonalToolbarFolder", YOONO_BKM.isPrivate(rTarget.Value), type=="Bookmark");
  123.         }
  124.     }
  125. } catch(e) {
  126.   log("exp : "+e);
  127. }
  128. }
  129.  
  130. function markPrivateFolders() {
  131.  
  132.     // FF3 specific
  133.     var menu=document.getElementById('bookmarksMenuPopup');
  134.     // FF2
  135.     if (!menu)
  136.         menu=document.getElementById('menu_BookmarksPopup');
  137.     
  138.     menu.addEventListener("popupshowing", function () {
  139.             try {
  140.                 function lock(node) {
  141.                     node.className=node.className.replace(/ private/g,"");
  142.                     if (    
  143.                         (node.node && node.node.itemId && YOONO_BKM.isPrivate(node.node.itemId)) // FF3
  144.                         || (node.id && YOONO_BKM.isPrivate(node.id)) // FF2
  145.                     ) {
  146.                         node.className+=" private";
  147.                     } else {
  148.                         
  149.                         for(var i=0;i<node.childNodes.length;i++) {
  150.                             lock(node.childNodes[i]);
  151.                         }
  152.                         
  153.                     }
  154.                 }
  155.                 lock(menu);
  156.         /* no longer available 
  157.                 var menuitem = document.getElementById("yoono-setroot-private");
  158.                 if (YOONO_BKM.isPrivate(YOONO_BKM.getCurrentTree().getId())) {
  159.                     menuitem.label = _("bkms.setrootpublic.label");
  160.                     menuitem.setAttribute("accesskey" , _("bkms.setrootpublic.accesskey"));
  161.                     menuitem.setAttribute("tooltiptext", _("bkms.setrootpublic.tooltiptext"));
  162.                     menuitem.setAttribute("oncommand", "setRootPublic()");
  163.                 } else {
  164.                     menuitem.label = YOONO_DIALOGS.bundle.GetStringFromName("bkms.setrootprivate.label");
  165.                     menuitem.setAttribute("accesskey" , _("bkms.setrootprivate.accesskey"));
  166.                     menuitem.setAttribute("tooltiptext", _("bkms.setrootprivate.tooltiptext"));
  167.                     menuitem.setAttribute("oncommand", "setRootPrivate()");
  168.                 }
  169.         */
  170.             } catch(e) {
  171.                 YOONO_LOG.exception(e);
  172.             }
  173.         },false);
  174.  
  175. }
  176.  
  177. function setRootPrivate () {
  178.    YOONO_BKM.addToPrivateList(YOONO_BKM.getCurrentTree().getId());
  179. }
  180.  
  181. function setRootPublic () {
  182.    YOONO_BKM.removeFromPrivateList(YOONO_BKM.getCurrentTree().getId());
  183. }
  184.  
  185. function searchSites(id) {
  186.    return window.openDialog('chrome://yoono/content/dialogs/search.xul', 'search', 'chrome,modal', {node:YOONO_BKM.getNode(id)});
  187. }
  188.  
  189. function bmMkPrivate (id) {
  190.    YOONO_BKM.addToPrivateList(id);
  191. }
  192.  
  193. function bmMkPublic (id) {
  194.    YOONO_BKM.removeFromPrivateList(id);
  195. }
  196.  
  197. function randomFromFolder(event, id) {
  198.   try {
  199.     YOONO_CMPT.addStat(['clic', 'foldersurprise', 'toolbar']);
  200.     YNPREFBRANCH.setCharPref('randomfolderid', id);
  201.     yoonoGlob.openUrlAccordingToPref('chrome://yoono/content/random.xul', event);
  202.   } catch(e) {
  203.     YOONO_LOG.exception(e);
  204.   }
  205. }
  206.  
  207. function backupBkms() {
  208.   YOONO_BKM.backup();
  209. }
  210.  
  211. function restoreBkms() {
  212.     window.openDialog('chrome://yoono/content/dialogs/restoreBkm.xul',
  213.                      'yoono-bookmarks', 'chrome,modal'); 
  214. }
  215.  
  216. ///////////////////
  217.  
  218.